//
//  SQLiteManager.swift
//  测试-02-FMDB
//
//  Created by teacher on 15/8/12.
//  Copyright © 2015年 itheima. All rights reserved.
//

import Foundation

/// 默认的数据库文件名，如果以db为结尾，容易被发现！
/// SQLite公开的版本不支持加密，如果需要加口令，可以去 github 找一个扩展
private let dbname = "status.db"

class SQLiteManager {
    static let sharedManager = SQLiteManager()
    
    // 能够保证线程安全，内部有一个串行队列！
    // executeStatements 执行很多SQL
    // executeQuery 执行查询
    // executeUpdate 执行单条 SQL，插入/更新/删除，除了 SELECT 都可以用这个函数
    let queue: FMDatabaseQueue
    
    // 在`构造函数`中，建立数据库队列
    // private 修饰符号可以禁止外部实例化对象，保证所有的访问都是通过 sharedManager 来调用的！
    private init() {
        let path = (NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.UserDomainMask, true).last! as NSString).stringByAppendingPathComponent(dbname)
        print(path)
        
        // 创建数据库队列
        // 如果数据库不存在，会新建数据库，否则会直接打开
        // 后续所有根数据库相关的操作，都通过 queue 来调用
        queue = FMDatabaseQueue(path: path)
        
        createTable()
    }
    
    /// 创建数据表
    private func createTable() {
        let path = NSBundle.mainBundle().pathForResource("tables.sql", ofType: nil)!
        let sql = try! String(contentsOfFile: path)
        
        queue.inTransaction { (db, rollback) in
            if db.executeStatements(sql) {
                print("创建数据表成功")
            } else {
                print("创建数据表失败")
            }
        }
    }
}